package com.yn.stragypattern.impl;

import com.yn.stragypattern.absract.AbstractCart;
import com.yn.stragypattern.domain.Cart;
import com.yn.stragypattern.domain.Item;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * VIP 用户的购物车逻辑
 *
 * @author yangni
 * @version 1.0
 * 人工智能开发小组
 * @date 2022/11/25 13:18
 */
@Service(value = "VipUserCart")
public class VipUserCart extends NormalUserCart  {
//    public Cart process(long userId, Map<Long, Integer> items) {
//        Cart cart = new Cart();
//
//        //把Map的购物车转换为Item列表
//        List<Item> itemList = new ArrayList<>();
//        itemList.stream().forEach(item -> {
//            //运费为商品总价的10%
//            item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).multiply(new BigDecimal("0.1")));
//            //购买两件以上相同商品，第三件开始享受一定折扣
//            if (item.getQuantity() > 2) {
//                item.setCouponPrice(item.getPrice()
//                        .multiply(BigDecimal.valueOf(100 - userId).divide(new BigDecimal("100")))
//                        .multiply(BigDecimal.valueOf(item.getQuantity() - 2)));
//            } else {
//                item.setCouponPrice(BigDecimal.ZERO);
//            }
//        });
//
////计算商品总价
//        cart.setTotalItemPrice(cart.getItems().stream().map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))).reduce(BigDecimal.ZERO, BigDecimal::add));
//        //计算运费总价
//        cart.setTotalDeliveryPrice(cart.getItems().stream().map(Item::getDeliveryPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
//        //计算总优惠
//        cart.setTotalDiscount(cart.getItems().stream().map(Item::getCouponPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
//        //应付总价=商品总价+运费总价-总优惠
//        cart.setPayPrice(cart.getTotalItemPrice().add(cart.getTotalDeliveryPrice()).subtract(cart.getTotalDiscount()));
//
//        return cart;
//    }

    @Override
    protected void processCouponPrice(long userId, Item item) {
        if (item.getQuantity() > 2) {
            item.setCouponPrice(item.getPrice()
                    .multiply(BigDecimal.valueOf(100 - userId).divide(new BigDecimal("100")))
                    .multiply(BigDecimal.valueOf(item.getQuantity() - 2)));
        } else {
            item.setCouponPrice(BigDecimal.ZERO);
        }
    }
}
